from typing import Dict, List

#      文字   背景
# 黑色	30    40
# 红色	31    41
# 绿色	32    42
# 黄色	33    43
# 蓝色	34    44
# 品红	35    45
# 青色	36    46
# 白色	37    47

# 文字格式
# 样式	代码
# 重置	0
# 加粗	1
# 下划线	4
# 反色（前景/背景互换）	7
# 隐藏（不可见）	8

# "\033[1;34;40m"  # 格式；文字色；背景色

RED = "\033[31m"
REVERSE = "\033[7m"
RESET = "\033[0m"


class Yi:

    def __init__(self):
        self.di: Dict[str, List[str]] = {}

    def init_di(self, key: str, value: List[str]):
        self.di[key] = value

    def print_di(self):
        for k, vs in self.di.items():
            print("")
            print(f"{k} {len(vs):02d} -> ", end='')
            for v in vs:
                print(v, end='')

    def print_song(self):
        song: Dict[str, List[str]] = {}

        for i in range(35):
            for k, vs in self.di.items():
                if f"{i + 1:02d}" not in song:
                    song[f"{i + 1:02d}"] = []
                if i < len(vs):
                    song[f"{i + 1:02d}"].append(vs[i])
                else:
                    song[f"{i + 1:02d}"].append(f"{RED}囗{RESET}")

        print(f"00 ->              h            o            u")

        for k, vs in song.items():
            print("")
            print(f"{k} -> ", end='')
            for i, v in enumerate(vs):
                print(v, end='')
                if i in {6, 13, 16, 19, 22}:
                    print("，", end='')
            if k in {"03", "13", "17", "23"}:
                print("")


def main():
    yi = Yi()
    yi.init_di("a", ["于", "亍", "丁", "厂", "牙", "由", "曲", "甲", "几", "仑", "尔", "欠", "前", "广", "马", "丑", "壴", "䒑", "󰁰", "", "彑", ""])
    yi.init_di("b", ["更", "髟", "歹", "屯", "目", "且", "虫", "长", "代", "乎", "争", "夕", "以", "辟", "亠", "", "", "", "", "镸", "", "丩"])
    yi.init_di("c", ["丽", "赤", "小", "四", "皿", "公", "牛", "合", "禾", "了", "尹", "奴", "彐", "罒", "", "", "", "", "", "", "", "牜", "厶", ""])
    yi.init_di("d", ["石", "未", "末", "耒", "甘", "廿", "执", "贝", "虍", "人", "入", "白", "鱼", "卑", "豸", "殳", "酋", "穴", "也", "糸", "𭤨", "丆", "", "", "𬜠", "", ""])
    yi.init_di("e", [f"{REVERSE}一{RESET}"])
    yi.init_di("f", ["天", "者", "甫", "见", "从", "夭", "彳", "八", "鸟", "门", "又", "双", "艹", "", "卌", "𰀃", "耂", ""])
    yi.init_di("g", ["可", "其", "至", "里", "田", "畀", "生", "先", "段", "九", "已", "己", "巴", "巳", "扌", "", "", ""])  # 差个"高"去掉下面的"口"
    yi.init_di("h", ["不", "青", "直", "面", "平", "圭", "豆", "豕", "止", "齿", "凹", "凸", "光", "月", "乂", "角", "立", "单", "亥", "予", "矛", "艮", "忄", "礻", "衤", "", "", "𡨄", "吅", "㠯", "⺝", "㐅", "厃", "", ])
    yi.init_di("i", [f"{REVERSE}丨{RESET}"])
    yi.init_di("j", ["一", "夫", "五", "丌", "兀", "瓦", "韦", "寸", "业", "自", "告", "勿", "衣", "半", "", "㐄", "亻", "", "", "", f"{REVERSE}丨{RESET}", f"{REVERSE}丶{RESET}", f"{REVERSE}丿{RESET}"])
    yi.init_di("k", ["大", "正", "戊", "弋", "戈", "戋", "敖", "口", "囗", "片", "之", "主", "羊", "尺", "爿", "", "", "", "𠮦", "勹", "戉", ""])
    yi.init_di("l", ["下", "元", "工", "龙", "士", "土", "鬲", "上", "卜", "内", "父", "竹", "心", "京", "农", "", "󰀠", "", "", "", "疒", "禸", "⽱", "", "", "", "", "⺊", ""])
    yi.init_di("m", ["走", "云", "林", "区", "比", "折", "骨", "氏", "隹", "方", "音", "鹿", "女", "疋", "", "龰", "", "释"])  # 差个"释"的左边，注意不是"采"
    yi.init_di("n", ["开", "干", "吉", "页", "七", "廾", "水", "手", "千", "匕", "舌", "文", "义", "辛", "", "", "氺", "氵", "", "灬", "", "", "刂", "𡭔", "夂", "", "旡", "", "", ""])  # 差临"左边，可能会用到攵
    yi.init_di("o", [f"{REVERSE}ノ{RESET}"])
    yi.init_di("p", ["三", "十", "犬", "尧", "共", "雨", "食", "舟", "卯", "定", "次", "火", "亦", "乙", "幺", "", "", "𦫻", "", "犭", "饣", "", "", "", "", "", "𢀖", "乚"])  # 没用到
    yi.init_di("q", ["革", "臣", "因", "旦", "今", "令", "丘", "斤", "六", "米", "民", "叚", "", "朿", "", "", "亼", "冖", "㐫", "㡀"])
    yi.init_di("r", [f"{REVERSE}丶{RESET}", "辶", "廴"])
    yi.init_di("s", ["王", "示", "亚", "是", "呆", "分", "壬", "鬼", "及", "言", "子", "孑", "聿", "刀", "凵", "", "冂", "讠", "屰", ""])  # 差个"周"的外层
    yi.init_di("t", ["才", "木", "西", "酉", "此", "占", "用", "鼠", "久", "臼", "户", "加", "甬", "乛", "㇕", "", "ㄅ", "㇉", "㇡", "覀", "朩", "", ""])
    yi.init_di("u", [f"{REVERSE}ㄋ{RESET}"])
    yi.init_di("v", ["相", "古", "中", "少", "气", "矢", "金", "母", "毋", "毌", "匚", "コ", "", "", "", "钅", "宀"])
    yi.init_di("w", ["去", "求", "万", "日", "曰", "我", "毛", "川", "象", "曾", "力", "乃", "⺀", "冫", "丷", "𰀆", "", "𦭝", "丂", "", "彡", "", "巛", "󰁹", "卩"])
    yi.init_di("x", ["丰", "尢", "回", "黑", "儿", "刍", "弟", "亡", "发", "弓", "", "", "", "", "纟", "", "𠂔", "𠔿"])
    yi.init_di("y", ["而", "二", "莫", "辰", "车", "井", "耳", "堇", "山", "巾", "化", "缶", "瓜", "爪", "麻", "兼", "习", "羽", "", "落", "爫", "", "癶", "", "屮", "阝", "𣎆", "車"])  # "落"需要去掉"各"
    yi.init_di("z", ["束", "非", "北", "身", "垂", "各", "乍", "皮", "尸", "", "", "", "丬"])

    yi.print_di()
    print("\n\n\n\n")
    yi.print_song()


if __name__ == '__main__':
    main()
